package yutProject_OOP;

import java.util.ArrayList;
import java.util.List;

public class Game {
	private static boolean OK = true;

	private static List<Player> playerList;
	private static int playerCount;
	private static YutMap yutMap;
	private static Screen screen = new Screen();
	private static Mode gameMode;

	public static Mode getGameMode() {
		return gameMode;
	}

	public static void setGameMode(Mode mode) {
		Game.gameMode = mode;
		screen.changeMode(mode);
	}

	public static void main(String[] args) throws InterruptedException {
		changeMode(Mode.Title);
		
		if (readyForGame() != OK) {
			// TODO : 게임준비 중 오류가 발생한 경우의 예외처리 필요.
		}

		screen.on();

		if (game()) {
			// TODO : 게임의 정상 종료 처리.
		} else {
			// TODO : 게임의 비정상 종료 처리.
		}
	}

	/**
	 * 게임을 준비한다.
	 * 
	 * @return boolean
	 */
	private static boolean readyForGame() {
		setPlayerCount(4);

		createYutMap(10, 10);

		return true;
	}

	/**
	 * 게임을 진행한다. 게임 중 오류가 발생하면 false 를 리턴하고 정상 종료되면 true 를 리턴한다.
	 * 
	 * @return
	 */
	private static boolean game() {
		return true;
	}

	/**
	 * 게임의 모드를 변경한다. Title, Game, EndTitle
	 * 
	 * @param mode
	 */
	private static void changeMode(Mode mode) {
		setGameMode(mode);
		screen.changeMode(mode);
	}

	/**
	 * 윷 놀이 게임의 참가자 수를 설정한다. 만약 이미 설정되어 있다면 PlayerCountSetAlreadyException 이
	 * 발생한다.
	 * 
	 * @param count
	 * @throws PlayerCountSetAlready
	 */
	private static void setPlayerCount(int count) {
		if (playerList != null && !playerList.isEmpty()) {
			// TODO : 추후 예외처리 필요.
		} else {
			playerCount = count;
			createPlayer(playerCount);
		}
	}

	/**
	 * 윷 놀이 참가자 객체를 생성한다.
	 * 
	 * @param playerCount
	 */
	private static void createPlayer(int playerCount) {
		playerList = new ArrayList<Player>();
		for (int i = 0; i < playerCount; i++) {
			playerList.add(new Player());
		}
	}

	/**
	 * 새로운 윷판을 생성한다.
	 * 
	 * @param width
	 * @param height
	 * @return YutMap size width x height
	 */
	private static YutMap createYutMap(int width, int height) {
		return new YutMap(width, height);
	}
}
